'''
将一个给定字符串 s 根据给定的行数 numRows ，以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 "PAYPALISHIRING" 行数为 3 时，排列如下：

P   A   H   N
A P L S I I G
Y   I   R

来源：力扣（LeetCode）
链接：https://leetcode.cn/problems/zigzag-conversion
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
'''

class Solution:
    def convert(self, s: str, numRows: int) -> str:
        if numRows == 1:
            return s

        '''
        至于n为什么要这样赋值，以及下面的idx := i % n的计算，
        只能说是一些数学规律的问题，
        没办法直接想出来，只能当成结论来接受
        
        2 * numRows - 2（2*3-2=4）：共3行，每2列4个元素为一组
        -2是因为有奇数列少了2个元素
        '''
        res, n = [''] * numRows, 2 * numRows - 2

        for i, c in enumerate(s):
            # := 对右式运算再复制给左值
            res[min(idx := i % n, n - idx)] += c
        print(res)

        return ''.join(res)



str001 = "123456789"

s =Solution()
s.convert(str001, 3)
'''可视化
1     5    9
2  4  6  8
3     7  
'''




